package com.LeeCode;

/**
 * 字符串转换整数 (atoi)
 */

public class Code008 {
    public static void main(String[] args) {
        String s = "0-1";
        System.out.println(new Code008().myAtoi(s));
    }

    public int myAtoi(String s) {
        int ans = 0, sign = 1, index = 0, len = s.length();

        // 1. 去除前导空格
        while (index < len && s.charAt(index) == ' ') {
            index++;
        }
        if (index == len) return 0;

        // 2. 处理符号
        if (s.charAt(index) == '+') {
            index++;
        } else if (s.charAt(index) == '-') {
            sign = -1;
            index++;
        }

        // 3. 处理数字
        while (index < len && Character.isDigit(s.charAt(index))) {
            int digit = s.charAt(index) - '0';

            // 检查溢出：ans > (Integer.MAX_VALUE - digit) / 10
            if (ans > (Integer.MAX_VALUE - digit) / 10) { // 通过等价变换来判断边界，防止溢出
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }

            ans = ans * 10 + digit;
            index++;
        }

        return ans * sign;
    }
}
